
package Gui;

import Oracle.OracleMethods;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;

public class reporteTabla extends javax.swing.JPanel {

    /** Creates new form reporteTabla */
    public reporteTabla() throws SQLException {
        initComponents();
    }

    //--------------------------LLENAR TABLA POR GASTOS-------------------------
   
    public void llenarTablaGastos() throws SQLException{
        
        DefaultTableModel kioscoTable = new MyTableModel();
        kioscoTable.addColumn("ID Number");
        kioscoTable.addColumn("Nombre");
        kioscoTable.addColumn("Gasto");
        int gasto = 0;
        
        Connection con = OracleMethods.oracleConnection();
        Statement sentencia = con.createStatement();
        ResultSet kioscoSet = sentencia.executeQuery("SELECT * FROM ao_kiosco");
        
         while(kioscoSet.next()) { 
            Vector row = new Vector();
            gasto = 0;
            row.add(kioscoSet.getInt("kiosco_PK"));
            row.add(kioscoSet.getString("nombre"));
            
            //Sumamos los gastos
            Connection con2 = OracleMethods.oracleConnection();
            Statement sentencia2 = con2.createStatement();
            ResultSet gastoSet = sentencia2.executeQuery("SELECT * FROM ao_gasto WHERE kiosco_pk_fk = " 
                                                        + kioscoSet.getString("kiosco_PK"));
            while(gastoSet.next()){
                gasto = gasto + gastoSet.getInt("monto");
            }
            sentencia2.close();
            gastoSet.close();
            con2.close();
            
            row.add(gasto);
            kioscoTable.addRow(row);
         }
            
        this.table.setModel(kioscoTable);
        table.setAutoCreateRowSorter(true);
        this.table.setVisible(true);

        sentencia.close();
        kioscoSet.close();
        con.close();
        
    }
    
    //-----------------------LLENAR TABLA DIFERENCIA INGRESO/EGRESO-------------
    
    public void llenarTablaDiferencia()throws SQLException{
        
        DefaultTableModel kioscoTable = new MyTableModel();
        kioscoTable.addColumn("ID Number");
        kioscoTable.addColumn("Nombre");
        kioscoTable.addColumn("Diferencia");
        kioscoTable.addColumn("Egreso");
        kioscoTable.addColumn("Ingreso");
        int gasto = 0;
        int venta = 0;
        
        Connection con = OracleMethods.oracleConnection();
        Statement sentencia = con.createStatement();
        ResultSet kioscoSet = sentencia.executeQuery("SELECT * FROM ao_kiosco");
        
         while(kioscoSet.next()) { 
            Vector row = new Vector();
            gasto = 0;
            venta = 0;
            row.add(kioscoSet.getInt("kiosco_PK"));
            row.add(kioscoSet.getString("nombre"));
            
            //Sumamos los gastos
            Connection con2 = OracleMethods.oracleConnection();
            Statement sentencia2 = con2.createStatement();
            ResultSet gastoSet = sentencia2.executeQuery("SELECT * FROM ao_gasto WHERE kiosco_pk_fk = " 
                                                        + kioscoSet.getString("kiosco_PK"));
            while(gastoSet.next()){
                gasto = gasto + gastoSet.getInt("monto");
            }
            sentencia2.close();
            gastoSet.close();
            con2.close();
            
            //buscamos la venta
            Connection con3 = OracleMethods.oracleConnection();
            Statement sentencia3 = con3.createStatement();
            ResultSet ventaSet = sentencia3.executeQuery("SELECT * FROM ao_info_venta WHERE kiosco_pk_fk = " 
                                                        + kioscoSet.getString("kiosco_PK"));
            while(ventaSet.next()){
                venta = ventaSet.getInt("montoventa");
            }
            sentencia3.close();
            ventaSet.close();
            con3.close();
            
            row.add(venta - gasto);
            row.add(gasto);
            row.add(venta);
            kioscoTable.addRow(row);
         }
            
        this.table.setModel(kioscoTable);
        table.setAutoCreateRowSorter(true);
        this.table.setVisible(true);

        sentencia.close();
        kioscoSet.close();
        con.close();
        
    }
    
    //-----------------------LLENAR TABLA DE KIOSCOS EN VENTA-------------------
    
    public void llenarTablaVenta()throws SQLException{
        
        DefaultTableModel kioscoTable = new MyTableModel();
        kioscoTable.addColumn("ID Number");
        kioscoTable.addColumn("Nombre");
        
        Connection con = OracleMethods.oracleConnection();
        Statement sentencia = con.createStatement();
        ResultSet kioscoSet = sentencia.executeQuery("SELECT * FROM ao_kiosco");
        
         while(kioscoSet.next()) { 
            Vector row = new Vector();
            row.add(kioscoSet.getInt("kiosco_PK"));
            row.add(kioscoSet.getString("nombre"));

            //buscamos la venta
            Connection con3 = OracleMethods.oracleConnection();
            Statement sentencia3 = con3.createStatement();
            ResultSet ventaSet = sentencia3.executeQuery("SELECT * FROM ao_info_venta WHERE kiosco_pk_fk = " 
                                                        + kioscoSet.getString("kiosco_PK"));
            if(!ventaSet.next()){
                kioscoTable.addRow(row);
            }
            sentencia3.close();
            ventaSet.close();
            con3.close();
            
         }
            
        this.table.setModel(kioscoTable);
        table.setAutoCreateRowSorter(true);
        this.table.setVisible(true);

        sentencia.close();
        kioscoSet.close();
        con.close();
        
    }
    
    //-----------------------LLENAR TABLA DE ALQUILERES DISPONIBLES-------------
    
    public void llenarTablaAlquiler()throws SQLException{
        
        DefaultTableModel kioscoTable = new MyTableModel();
        kioscoTable.addColumn("ID Number");
        kioscoTable.addColumn("Nombre");
        kioscoTable.addColumn("Derecha");
        kioscoTable.addColumn("Izquierda");
        kioscoTable.addColumn("Atras");
        
        Connection con = OracleMethods.oracleConnection();
        Statement sentencia = con.createStatement();
        ResultSet kioscoSet = sentencia.executeQuery("SELECT * FROM ao_kiosco");
        
         while(kioscoSet.next()) { 
            Vector row = new Vector();
            row.add(kioscoSet.getInt("kiosco_PK"));
            row.add(kioscoSet.getString("nombre"));
            row.add("SI");
            row.add("SI");
            row.add("SI");

            //buscamos la venta
            Connection con3 = OracleMethods.oracleConnection();
            Statement sentencia3 = con3.createStatement();
            ResultSet alquilerSet = sentencia3.executeQuery("SELECT * FROM ao_alquiler WHERE kiosco_pk_fk = " 
                                                        + kioscoSet.getString("kiosco_PK"));
            while(alquilerSet.next()){
                if(alquilerSet.getString("posicion").equals("Derecha"))
                    row.set(2, "NO");
                if(alquilerSet.getString("posicion").equals("Izquierda"))
                    row.set(3, "NO");
                if(alquilerSet.getString("posicion").equals("Atras"))
                    row.set(4, "NO");
            }
            sentencia3.close();
            alquilerSet.close();
            con3.close();
            
            kioscoTable.addRow(row);
         }
            
        this.table.setModel(kioscoTable);
        table.setAutoCreateRowSorter(true);
        this.table.setVisible(true);

        sentencia.close();
        kioscoSet.close();
        con.close();
        
    }
    
    //----------------------LLENAR TABLA CON KIOSCOS POR ZONA-------------------
    public void llenarTablaZona() throws SQLException {
        
        DefaultTableModel kioscoTable = new MyTableModel();
        kioscoTable.addColumn("ID Number");
        kioscoTable.addColumn("Nombre");
        kioscoTable.addColumn("Nro de Kioscos");
        int cantidad = 0;
        
        Connection con = OracleMethods.oracleConnection();
        Statement sentencia = con.createStatement();
        ResultSet direcSet = sentencia.executeQuery("SELECT * FROM ao_direccion");
        
         while(direcSet.next()) { 
            if(direcSet.getString("tipo").equals("Zona")){
            cantidad = 0;    
            Vector row = new Vector();
            row.add(direcSet.getInt("direccion_pk"));
            row.add(direcSet.getString("nombre"));

            //buscamos los kioscos en esa direccion
            Connection con3 = OracleMethods.oracleConnection();
            Statement sentencia3 = con3.createStatement();
            ResultSet kioscoSet = sentencia3.executeQuery("SELECT * FROM ao_kiosco WHERE direccion_fk = " 
                                                        + direcSet.getString("direccion_PK"));
            while(kioscoSet.next()){
                cantidad = cantidad + 1;
            }
            
            row.add(cantidad);
            sentencia3.close();
            kioscoSet.close();
            con3.close();
            
            kioscoTable.addRow(row);
            
         }
         }
            
        this.table.setModel(kioscoTable);
        table.setAutoCreateRowSorter(true);
        this.table.setVisible(true);

        sentencia.close();
        direcSet.close();
        con.close();
        
    }
    
    //-----------------------LLENAR TABLA DE CANTIDAD DE VALAS------------------
    
    public void llenarTablaVallas(Date comienzo, Date fin)throws SQLException{
        
        DefaultTableModel kioscoTable = new MyTableModel();
        kioscoTable.addColumn("Material Valla");
        kioscoTable.addColumn("Costo");
        kioscoTable.addColumn("Cantidad");
        int cantidad = 0;
        
        Connection con = OracleMethods.oracleConnection();
        Statement sentencia = con.createStatement();
        ResultSet detalleSet = sentencia.executeQuery("SELECT * FROM ao_detalle_pedido");
        
         while(detalleSet.next()) { 
           
             //buscamos lel mantenimiento para contar el pago del empleado
            Connection con3 = OracleMethods.oracleConnection();
            Statement sentencia3 = con3.createStatement();
            ResultSet pedidoSet = sentencia3.executeQuery("SELECT * FROM ao_pedido WHERE pedido_pk = " 
                                                        + detalleSet.getString("pedido_PK_fk"));
            pedidoSet.next();
            if(pedidoSet.getDate("Fecha_Pedido").after(comienzo) && pedidoSet.getDate("Fecha_Pedido").before(fin)){
            Vector row = new Vector();
            //buscamos lel mantenimiento para contar el pago del empleado
            Connection con4 = OracleMethods.oracleConnection();
            Statement sentencia4 = con4.createStatement();
            ResultSet auxSet = sentencia4.executeQuery("SELECT * FROM ao_material WHERE material_pk = " 
                                                        + detalleSet.getString("material_fk"));
            auxSet.next();
            row.add(auxSet.getString("material"));
            
            auxSet = sentencia4.executeQuery("SELECT * FROM ao_valla_material WHERE material_pk_fk = " 
                                                        + detalleSet.getString("material_fk"));
            auxSet.next();
            row.add(auxSet.getString("costo"));
            row.add(detalleSet.getInt("cantidad"));

            sentencia4.close();
            auxSet.close();
            con4.close();

            
            sentencia3.close();
            pedidoSet.close();
            con3.close();
            kioscoTable.addRow(row);
         }
         }
            
        this.table.setModel(kioscoTable);
        table.setAutoCreateRowSorter(true);
        this.table.setVisible(true);

        sentencia.close();
        detalleSet.close();
        con.close();
        
    }
    
    //-----------------------LLENAR TABLA DE KIOSCOS EN VENTA-------------------
    
    public void llenarTablaMantenimientos(Date comienzo, Date fin)throws SQLException{
        
        DefaultTableModel kioscoTable = new MyTableModel();
        kioscoTable.addColumn("CI Empleado");
        kioscoTable.addColumn("Nro Kiosco");
        kioscoTable.addColumn("Fecha");
        kioscoTable.addColumn("Horas");
        kioscoTable.addColumn("A pagar");
        int pago = 0;
        
        Connection con = OracleMethods.oracleConnection();
        Statement sentencia = con.createStatement();
        ResultSet kioscoSet = sentencia.executeQuery("SELECT * FROM ao_mant_kiosco");
        
         while(kioscoSet.next()) { 
         if(kioscoSet.getDate("Fecha_PK").after(comienzo) && kioscoSet.getDate("Fecha_PK").before(fin)){
            pago = 0;
            Vector row = new Vector();
            row.add(kioscoSet.getInt("ci_pk_fk"));
            row.add(kioscoSet.getString("kiosco_pk_fk"));
            row.add(kioscoSet.getString("fecha_pk"));
            row.add(kioscoSet.getString("horas"));

            //buscamos lel mantenimiento para contar el pago del empleado
            Connection con3 = OracleMethods.oracleConnection();
            Statement sentencia3 = con3.createStatement();
            ResultSet mantSet = sentencia3.executeQuery("SELECT * FROM ao_mantenimiento WHERE mantenimiento_pk = " 
                                                        + kioscoSet.getString("mant_PK_fk"));
            if(mantSet.next()){
                pago = mantSet.getInt("costo_hora_empleado")*kioscoSet.getInt("horas");
            row.add(pago);
            }
            sentencia3.close();
            mantSet.close();
            con3.close();
            
            kioscoTable.addRow(row);
         }
         }
            
        this.table.setModel(kioscoTable);
        table.setAutoCreateRowSorter(true);
        this.table.setVisible(true);

        sentencia.close();
        kioscoSet.close();
        con.close();
        
    }
    
    class MyTableModel extends DefaultTableModel {  
  
    public MyTableModel(Object rowData[][], Object columnNames[]) {  
         super(rowData, columnNames);  
    }  
    
    public MyTableModel() {  
         super();  
    } 
     
    @Override  
      public Class getColumnClass(int col) {  
        if (col == 2)       //second column accepts only Integer values  
            return Integer.class;  
        else return String.class;  //other columns accept String values  
    }  
    }
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        scroll = new javax.swing.JScrollPane();
        table = new javax.swing.JTable();

        table.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        scroll.setViewportView(table);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 583, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 430, Short.MAX_VALUE)
                .addContainerGap())
        );
    }// </editor-fold>//GEN-END:initComponents
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JScrollPane scroll;
    private javax.swing.JTable table;
    // End of variables declaration//GEN-END:variables
}
